#ifndef TABLEROTABLERO_H
#define TABLEROTABLERO_H

#include "imapa.h"
#include "mapaesferico.h"
#include "mapaplano.h"
#include "texturadefondo.h"
#include "Mapa.h"
#include "ObserverGtk.h"

#include <GL/gl.h>
#include <GL/glu.h>
#include <gtkmm.h>
#include <gtkglmm.h>

using namespace ui::tablero::mapa;
using namespace Gtk::GL;

namespace ui {
namespace tablero {

typedef enum tipo_mapa_e {
	MAPA_ESFERICO,
	MAPA_PLANO
} tipo_mapa_e;

class Tablero: public DrawingArea , public ObserverGtk{

public:

    Tablero(const Glib::RefPtr<const Gdk::GL::Config>& p_Config, Mapa *mapa);
    ~Tablero();

	void cambiarMapa(tipo_mapa_e p_eTipoMapa);
	IMapa *getMapa();
	void invalidate();
	virtual bool on_key_press_event(GdkEventKey *event);
	tipo_mapa_e get_tipo_mapa();
	void update();
	
	bool getTerritorioSeleccionado(string &territorio, string &continente);

private:
	
	red::hilos::thread::Mutex control_Mutex;
	
	Mapa *modelo;
	
	bool m_bSalir;
	IMapa *m_pMapa;
	MapaEsferico m_MapaEsferico;
	MapaPlano m_MapaPlano;
	tipo_mapa_e m_eTipoMapa;
	TexturaDeFondo m_TexturaDeFondo;

	virtual void on_realize();
	virtual bool on_configure_event(GdkEventConfigure *event);
	virtual bool on_expose_event(GdkEventExpose *event);
	virtual bool on_button_press_event(GdkEventButton *event);
	bool actualizarVista();
};

}
}

#endif
